package cn.jfinal;

import cn.jfinal.controller.IndexController;
import cn.jfinal.controller.UserController;
import cn.jfinal.interceptor.RequestInterceptor;
import com.jfinal.config.*;
import com.jfinal.core.JFinal;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;

/**
 * @packageName: cn.jfinal
 * @name: MyConfig
 * @description:
 * @author: 董定卓
 * @dateTime: 2018/8/21 15:05
 */
public class AppConfig extends JFinalConfig {

    public static void main(String[] args) {
        JFinal.start("src/main/webapp", 80, "/");
    }

    /**
     * 配置常量
     *
     * @param constants
     */
    public void configConstant(Constants constants) {
        // 加载少量必要配置，随后可用PropKit.get(...)获取值
        Prop app = PropKit.use("prop/app.properties");
        String mode = app.get("mode");
        PropKit.append("prop/app-" + mode + ".properties");
    }

    /**
     * 配置路由
     *
     * @param routes
     */
    public void configRoute(Routes routes) {
        routes.add("/", IndexController.class);
        routes.add("/user", UserController.class);
    }

    /**
     * 配置模版
     *
     * @param engine
     */
    public void configEngine(Engine engine) {
        engine.addSharedFunction("/template/_layout.html");
        engine.addSharedFunction("/template/_paginate.html");

    }

    /**
     * 配置插件
     *
     * @param plugins
     */
    public void configPlugin(Plugins plugins) {
        // 配置 druid 数据库连接池插件
        DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl").trim(), PropKit.get("user").trim(), PropKit.get("password").trim(), PropKit.get("driver").trim(), PropKit.get("filters").trim());
        druidPlugin.setPublicKey(PropKit.get("publicKey").trim());
        plugins.add(druidPlugin);

        // 配置ActiveRecord插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        arp.setShowSql(true);
        plugins.add(arp);
    }

    /**
     * 配置全局拦截器
     *
     * @param interceptors
     */
    public void configInterceptor(Interceptors interceptors) {
        interceptors.add(new RequestInterceptor());
    }

    /**
     * 配置处理器
     *
     * @param handlers
     */
    public void configHandler(Handlers handlers) {

    }
}
